package com.chatmcp.mcprouter.service;

import com.chatmcp.mcprouter.dto.ProxyInfoDto;
import com.chatmcp.mcprouter.model.ServerLog;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 服务器日志服务接口
 * 提供更完善的日志记录和查询功能
 */
public interface ServerLogService {

    /**
     * 创建并保存服务器日志
     *
     * @param serverLog 服务器日志对象
     * @return 保存后的服务器日志对象
     */
    ServerLog createServerLog(ServerLog serverLog);

    /**
     * 从代理信息创建并保存服务器日志
     *
     * @param proxyInfo 代理信息
     * @return 保存后的服务器日志对象
     */
    ServerLog createServerLogFromProxyInfo(ProxyInfoDto proxyInfo);

    /**
     * 根据ID查询服务器日志
     *
     * @param id 主键ID
     * @return 服务器日志对象
     */
    ServerLog getServerLogById(Long id);

    /**
     * 根据请求ID查询服务器日志
     *
     * @param requestId 请求ID
     * @return 服务器日志对象
     */
    ServerLog getServerLogByRequestId(String requestId);

    /**
     * 根据会话ID查询服务器日志列表
     *
     * @param sessionId 会话ID
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsBySessionId(String sessionId);

    /**
     * 根据服务器键查询服务器日志列表
     *
     * @param serverKey 服务器键
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsByServerKey(String serverKey);

    /**
     * 根据服务器UUID查询服务器日志列表
     *
     * @param serverUuid 服务器UUID
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsByServerUuid(String serverUuid);

    /**
     * 根据方法名查询服务器日志列表
     *
     * @param method 方法名
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsByMethod(String method);

    /**
     * 根据时间范围查询服务器日志列表
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据条件查询服务器日志列表
     *
     * @param conditions 查询条件映射
     * @return 服务器日志列表
     */
    List<ServerLog> getServerLogsByConditions(Map<String, Object> conditions);

    /**
     * 获取日志统计信息
     *
     * @return 统计信息映射
     */
    Map<String, Object> getServerLogStats();

    /**
     * 清理指定时间之前的日志
     *
     * @param beforeTime 时间点
     * @return 清理的日志数量
     */
    int cleanupServerLogsBefore(LocalDateTime beforeTime);
} 